<?php

/**
 * Парсер страницы
 */
class PageParser implements iPageParser {

	private static $instance = false;
	
	private
		$aFormatsTranslators = array (),
		$currentFormat       = '';
	
	/**
	 * Возвращает объект класса PageParser
	 * @return PageParser
	 */
	public static function getInstance () {
		if (self::$instance === false) {
			self::$instance = new pageParser;
		}
		return self::$instance;
	}
	
	private function __construct () {}
	
	public function __clone () {
		throw new CoreException (lang('error_parser_cant_clone',__CLASS__));
	}
	
	/**
	 * Добавить обработчик формата
	 * @param string $formatName название формата
	 * @param string $translatorClass класс-обработчик
	 * @param boolean $isDefault формат по умолчанию
	 * @return void
	 */
	public function addFormatTranslator ($formatName, $translatorClass, $isDefault = false) {
		$this->aFormatsTranslators[$formatName] = $translatorClass;
		
		if ($isDefault) {
			$this->currentFormat = $formatName;
		}
	}
	
	/**
	 * Установить текущий формат отображения
	 * @param string $formatName
	 * @return void
	 */
	public function setCurrentFormat ($formatName) {
		if (!empty ($this->aFormatsTranslators[$formatName])) {
			$this->currentFormat = $formatName;
		} else {
			throw new CoreException (lang('error_undefined_format',__CLASS__) . $formatName);
		}
	}
	
	/**
	 * Получить текущий формат отображения
	 * @return string
	 */
	public function getCurrentFormat () {
		return $this->currentFormat;
	}
	
	/**
	 * Формирование и вывод страницы
	 * @return void
	 */
	public function render (ModuleResponse $oResponse) {
		$formatName = $this->currentFormat;
		$oFormatTranslator = new $this->aFormatsTranslators[$formatName];
		
		print $oFormatTranslator->render ($oResponse);
	}
	
}